package cn.com.springsource.dao.jdkProxy;

import cn.com.springsource.dao.dao.LubanDao;
import cn.com.springsource.dao.dao.LubanDaoImpl;
import sun.misc.ProxyGenerator;

import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Proxy;

public class TestJDKProxy {

    public static void main(String[] args) {


        /**
         * 输出JDK动态代理的.class文件
         */
        byte[] $Proxy18s = ProxyGenerator.generateProxyClass("$Proxy18", new Class[]{LubanDao.class});
        try {
            FileOutputStream fileOutputStream = new FileOutputStream("d:\\com\\google\\$Proxy18s.class");
            fileOutputStream.write($Proxy18s);
        } catch (IOException e) {
            e.printStackTrace();
        }

        /**
         * 第一个参数classLoader,作用将 新生成的代理类文件加载到 jvm内存中
         * 第二个参数 指定代理的目标接口类型
         * 第三个参数  代理对象
         */
        LubanDao lubanDao = (LubanDao) Proxy.newProxyInstance(TestJDKProxy.class.getClassLoader(), new Class[]{LubanDao.class}, new LuBanInvocationHandler(new LubanDaoImpl()));
        try {
            lubanDao.query();
            lubanDao.proxy();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
